/* 
token处理的工具模块
1. 生成token
2. 校验token
*/
const jwt = require('jsonwebtoken')

const TOKEN_KEY = 'atgugu_key'

/**
 * 生成token
 * @param {*} userId 用户id 
 * @param {*} expiresIn 过期时间, 可以数值, 单位秒, 也可以是字符串
 * @returns token
 */
const createToken = (userId, expiresIn='7d') => {
  // 对用户id进行加密生成token
  const token = jwt.sign(
    {data: userId}, // 包含用户id的对象
    TOKEN_KEY, // 密钥
    {expiresIn} // 配置过期时间, 默认为7天
  )

  // 返回token
  return token
}
exports.createToken = createToken

/**
 * 对token进行校验, 并返回promise
 * @param {*} token 
 * @returns 如果校验失败, promise的reason为error, 如果成功, value为userId
 */
const virifyToken = (token) => {
  return new Promise((resolve, reject) => {
    jwt.verify(token, TOKEN_KEY, (error, decode) => {
      if(error) {
        reject(new Error('token过期或非法'))
      } else {
        resolve(decode.data)
      }
    })
  })
}
exports.verifyToken = virifyToken

// 测试一下子
// const token = createToken('abc', 3)
// console.log(token)
// setTimeout(() => {
//   console.log(virifyToken(token))
// }, 4000);